<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div onclick="alert(111)">123123</div>
</body>
<script>
    // 1. 打印的三种方法
    // console.log()
    // document.write()
    // alert()

    // prompt()
    // confirm()

    // 2. js三种引入方式
    // 内部 外部 内联

    // 3. 变量的三种声明方式
    // var a;  a = 1;
    // var a = 1;
    // var a = 1, b = 2,c = 3;

    // 变量/函数 命名规范
    // a. 数字 字母 下划线 $ 组成 , 但是不能以数字开头
    // b. 不能包含中文 空格 特殊字符 (+ - * / %)
    // c. 严格区分大小写
    // d. 不使用关键字  保留字
    // e. 驼峰式命名法  下划线命名法

    // 基本数据类型
    // Number String Boolean null undefined     Object(Array)   Symbol  BigInt
    // typeof

    // 运算符
    // 算术运算符  * / %     + -
    // 关系运算符  > >= < <=     ==  !=   ===  !==
    // 逻辑运算符  !   &&   ||
    // 赋值运算符  ++ --    = += -= *=  /= %=
    // 三目运算符(?:)

    // 运算符的优先级
    // () [] . > ++ -- ! typeof > 算术运算符 > 关系运算符 > 逻辑运算符(!) >  三目运算符 > 赋值运算符(++ --)

    // 运算符中涉及到的隐式类型转换
    // 1. 其他类型(值类型) 遇到 算术运算符  => 隐式类型转换
    //  a. 字符串 遇到 " + " 拼接形成新的字符串
    //     字符串 遇到 - * / % 先转数字 再运算 (其中纯数字类型的字符串 "100" => 直接转数字   非纯数字类型的字符串  "100a"  => NaN)
    // console.log("100" * 1);
    // console.log("100a" * 1);
    // console.log(typeof NaN);

    //  b. 布尔值遇到算术运算符  true => 1  false => 0
    //  c.  null和undefined 遇到算术运算符   null=> 0 undefined => NaN

    // 2. 其他类型(值类型) 遇到 关系运算符 ( > >= < <=     ==  !=   ===  !==)
    // a. 字符串,布尔值 和数字比较时 先转数字再比较

    // console.log("10" > 3);  // "10" => 10 > 3  => true
    // console.log(true > 3);  // true => 1  > 3  => false
    // console.log(true == 1); // true
    // console.log(true == 2);  //false

    // b. 字符串和字符串比较  => 字符比较(比ASCII码) => 第一个字符不同就比第一个,第一个字符相同 就比第二个
    // console.log("15" > "3");  // "1" => 49   "3" =>  51    49 > 51
    // console.log("15" > "13");  // "5" => 53   "3" =>  51    53 > 51

    // c. null和undefined 在数值上是相等的
    // console.log(null == undefined);

    // d. null和undefined 遇到 (==  !=   ===  !==) 不会进行隐式类型转换 => 直接比较 => 没有可比性
    // null和undefined 遇到 ( > >= < <= ) 会进行隐式类型转换为数字类型 => 再比较
    // console.log(null >= 0); //null => 0  >= 0
    // console.log(undefined >= 0); // undefined => NaN >= 0

    // e. NaN不和任何值相等
    // console.log(NaN > 1);
    // console.log(NaN == 1);
    // console.log(NaN < 1);
    // console.log(NaN == NaN);

    // 3. !的隐式类型转换
    // a. 如果是布尔值直接取反
    // b. 如果不是布尔值 => 先隐式转化为布尔值再取反
    // console.log(!true);  // false
    // console.log(!false);  // true

    // console.log(!1);  // 1=> true  !true => false
    // console.log(!"");  // "" => false  !false => true

    // !!  取反之后再取反  => 其他类型转布尔值
    // console.log(!!1);
    // console.log(!![]);
    // console.log(!!{});
    // console.log(!!function () { });

    // console.log(!!"");
    // console.log(!!0);
    // console.log(!!NaN);
    // console.log(!!null);
    // console.log(!!undefined);

    // 3. ++ -- 的隐式类型转换   => 其他类型遇到++ -- 先隐式转数字 在自增/自减
    var num = "100";
    num++;
    console.log(num);







</script>

</html>